package com.coincalf.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.coincalf.dto.*;
import com.coincalf.entity.TurnoverOrder;
import com.google.common.cache.LoadingCache;
import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 成交订单 服务类
 * </p>
 *
 * @author qiang
 * @since 2018-05-12
 */
public interface TurnoverOrderService extends IService<TurnoverOrder> {

    /**
     * 获取成交数据
     *
     * @param marketId 交易对ID
     * @return
     */
    TurnoverDataDTO queryAndSaveTurnoverData(long marketId);

    /**
     * 获取交易对最新成交价
     *
     * @param marketId 交易对ID
     * @return
     */
    BigDecimal queryCurrentPrice(Long marketId);

    /**
     * 获取24小时成交数据
     *
     * @param marketId 交易对ID
     * @return
     */
    TurnoverData24HDTO query24HDealData(long marketId);

    /**
     * 币币交易最新成交记录缓存实例
     *
     * @return
     */
    LoadingCache<Long, List<TradeDealOrderDTO>> DEAL_ORDER_CACHE_INSTANCE();


    /**
     * 订单管理-成交记录
     *
     * @param page   分页参数
     * @param userId 用户ID
     * @param symbol 交易对标识符
     * @param type   买卖类型
     * @return
     */
    Page<DealRecordDTO> selectOrders(Page<DealRecordDTO> page, long userId, String symbol, int type);

    /**
     * 今日成交
     *
     * @param userId 用户ID
     * @return
     */
    List<ForexTodayTurnoverDTO> selectTodayList(Long userId);

    /**
     * 撮合成功后资金扣减
     * @param txDTO
     */
    void match(TxDTO txDTO);
}
